package guigu.Collection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 *  集合元素的遍历操作，使用迭代器iterator接口
 *  1、内部的方法：hasNext() 和 next()
 *  2、集合对象每次调用iterator()方法都得到一个全新的迭代器对象，默认游标都在集合的第一个元素之前。
 */
public class IteratorTest {
    @Test
    public void test1()
    {
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add("AA");
        coll.add("dd");
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();
        //方式一
  /*      System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());*/
        //报异常:NoSuchElementException
       //System.out.println(iterator.next());

        //方式二;不推荐
       /* for(int i=0;i<coll.size();i++)
        {
            System.out.println(iterator.next());
        }*/

        //方式三：推荐
        while(iterator.hasNext())
        {
            System.out.println(iterator.next());
        }
    }

    //两种错误方式
    @Test
    public void test2()
    {
        //错误方式一：
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add("AA");
        coll.add("dd");
        coll.add(new String("Tom"));
        coll.add(false);

       /* Iterator iterator = coll.iterator();
        while((iterator.next())!= null)
        {
            System.out.println(iterator.next());
        }*/

        //错误方式二
        while(coll.iterator().hasNext())
        {
            System.out.println(coll.iterator().next());
        }
    }


    /*
       测试iterator中的remove()
       如果还未调用next()或在上一次调用next方法之后已经用了remove()方法，
       再调用remove()都会报IllegalStateExcetion.
     */
    @Test
    public void test3()
    {
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add("AA");
        coll.add("dd");
        coll.add(new String("Tom"));
        coll.add(false);


        //删除集合中的"Tom"
        Iterator iterator = coll.iterator();
        while(iterator.hasNext())
        {
            Object next = iterator.next();
            if("Tom".equals(next))
            {
                iterator.remove();
            }
        }
        iterator = coll.iterator();
        while(iterator.hasNext())
        {
            System.out.println(iterator.next());
        }
    }
}
